home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2002 November / SGI IRIX Base Documentation 2002 November.iso / usr / share / catman / g_man / cat3 / OpenGL / glinstrumentssgix.z / glinstrumentssgix
Encoding:
Text File  |  2002-10-03  |  30.6 KB  |  397 lines

  1.  
  2.  
  3.  
  4. ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))          OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee          ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX,,,, ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,,,, ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,,,,
  10.      ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,,,, ggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,,,, ggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX - take
  11.      measurements from enabled instruments in the GL
  12.  
  13.  
  14. CCCC SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  15.      void ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX( GLsizei _s_i_z_e,
  16.                                    GLint *_b_u_f_f_e_r )
  17.  
  18.  
  19. PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
  20.      _s_i_z_e      specifies the number of GLints in _b_u_f_f_e_r
  21.  
  22.      _b_u_f_f_e_r    specifies a pointer to the buffer for instrument measurement
  23.                records
  24.  
  25. CCCC SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  26.      void ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX( void )
  27.  
  28.  
  29. CCCC SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  30.      void ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX( GLint _m_a_r_k_e_r )
  31.  
  32.  
  33. CCCC SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  34.      void ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX( GLint _m_a_r_k_e_r )
  35.  
  36.  
  37. PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
  38.      _m_a_r_k_e_r
  39.           specifies a marker value to be returned along with the measurement
  40.           record
  41.  
  42. CCCC SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  43.      GLint ggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX( GLint *_m_a_r_k_e_r__p )
  44.  
  45.  
  46. PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
  47.      _m_a_r_k_e_r__p
  48.           specifies a pointer to the location where the marker sent with a
  49.           measurement will be written after the measurement record is written
  50.           to the instrument buffer
  51.  
  52. FFFFUUUUNNNNCCCCTTTTIIIIOOOONNNN RRRREEEETTTTUUUURRRRNNNN
  53.      Returns:
  54.  
  55.      0   when no new measurement has been written to the buffer since the last
  56.          call to ggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))          OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee          ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))
  71.  
  72.  
  73.  
  74.      1   when a new measurement has been written to the instrument buffer
  75.          since the last such call
  76.  
  77.      -1  when a buffer overflow has been detected
  78.  
  79. CCCC SSSSPPPPEEEECCCCIIIIFFFFIIIICCCCAAAATTTTIIIIOOOONNNN
  80.      GLint ggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX( void )
  81.  
  82.  
  83. FFFFUUUUNNNNCCCCTTTTIIIIOOOONNNN RRRREEEETTTTUUUURRRRNNNN
  84.      Returns the number of GLints that have been written to the instrument
  85.      buffer since the last buffer reset or call to ggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.
  86.  
  87. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  88.      ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX, ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,
  89.      ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX and ggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX are
  90.      part of the GGGGLLLL____SSSSGGGGIIIIXXXX____iiiinnnnssssttttrrrruuuummmmeeeennnnttttssss extension.
  91.  
  92.      Instruments allow an application to measure performance of the GL
  93.      pipeline and identify possible bottlenecks. This information may be
  94.      useful in feedback-based load management schemes which attempt to
  95.      maintain a constant frame-rate, or in tuning an application for best
  96.      performance.
  97.  
  98.      GGGGLLLL____SSSSGGGGIIIIXXXX____iiiinnnnssssttttrrrruuuummmmeeeennnnttttssss provides an instrumentation framework, but no
  99.      instruments.  The set of available instruments varies between OpenGL
  100.      implementations, and can be determined by querying the GGGGLLLL____EEEEXXXXTTTTEEEENNNNSSSSIIIIOOOONNNNSSSS
  101.      string returned by ggggllllGGGGeeeettttSSSSttttrrrriiiinnnngggg for the names of the extensions that
  102.      implement the instruments.
  103.  
  104.      Unlike feedback and selection (see ggggllllSSSSeeeelllleeeeccccttttBBBBuuuuffffffffeeeerrrr and ggggllllFFFFeeeeeeeeddddbbbbaaaacccckkkkBBBBuuuuffffffffeeeerrrr),
  105.      GGGGLLLL____SSSSGGGGIIIIXXXX____iiiinnnnssssttttrrrruuuummmmeeeennnnttttssss provides commands that allow measurements to be
  106.      delivered asynchronously, so that the graphics pipeline need not be
  107.      stalled while measurements are returned to the client.
  108.  
  109.      A buffer in which to collect instrument measurements is specified with
  110.      ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX.  _s_i_z_e specifies the size of the buffer, as a
  111.      count of GLints.  The buffer will be prepared in a way that allows it to
  112.      be written asynchronously by the graphics pipeline.  If the same _b_u_f_f_e_r
  113.      was specified on a previous call, the buffer is reset; that is,
  114.      measurements taken after the call to ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX will be
  115.      written to the start of the buffer.  If _b_u_f_f_e_r is zero, then any
  116.      resources allocated by a previous call to prepare the buffer for writing
  117.      will be freed.  If _b_u_f_f_e_r is non-zero, but is different from a previous
  118.      call, the old buffer is replaced by the new buffer and any allocated
  119.      resources involved in preparing the old buffer for writing are freed.
  120.  
  121.      The buffer address can be queried with ggggllllGGGGeeeettttPPPPooooiiiinnnntttteeeerrrrvvvvEEEEXXXXTTTT using argument
  122.      GGGGLLLL____IIIINNNNSSSSTTTTRRRRUUUUMMMMEEEENNNNTTTT____BBBBUUUUFFFFFFFFEEEERRRR____PPPPOOOOIIIINNNNTTTTEEEERRRR____SSSSGGGGIIIIXXXX.
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))          OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee          ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))
  137.  
  138.  
  139.  
  140.      To enable an instrument, use ggggllllEEEEnnnnaaaabbbblllleeee with an argument that specifies the
  141.      instrument.  The argument to use for a particular instrument is
  142.      determined by the OpenGL extension that supports that instrument.  (See
  143.      below for an example.)
  144.  
  145.      To start the currently-enabled instrument(s) call ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.
  146.      To take a measurement use ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.  To stop the currently-
  147.      enabled instruments and take a final measurement use
  148.      ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.  The parameter _m_a_r_k_e_r will be passed through the
  149.      pipe and written to the buffer to ease the task of interpreting it.
  150.  
  151.      The format of any instrument measurement in the buffer obeys certain
  152.      conventions. The first word of the measurement is the ggggllllEEEEnnnnaaaabbbblllleeee enum for
  153.      the instrument itself. The second word of the measurement is the size in
  154.      GLints of the entire measurement so that any parser can step over
  155.      measurements with which it is unfamiliar.  Currently there are no
  156.      implementation independent instruments to describe. Some implementation
  157.      dependent instruments are described in the Machine Dependencies section
  158.      of this page.
  159.  
  160.      In a single measurement, if multiple instruments are enabled, the data
  161.      for those instruments can appear in the buffer in any order.
  162.  
  163.      If no instruments are enabled executing ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,
  164.      ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, or ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssss will not write measurements
  165.      to the buffer.
  166.  
  167.      The number of measurements taken since the buffer was reset can be
  168.      queried with ggggllllGGGGeeeetttt using GGGGLLLL____IIIINNNNSSSSTTTTRRRRUUUUMMMMEEEENNNNTTTT____MMMMEEEEAAAASSSSUUUURRRREEEEMMMMEEEENNNNTTTTSSSS____SSSSGGGGIIIIXXXX.
  169.  
  170.      To determine whether a measurement has been written to the buffer call
  171.      ggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.  If a new measurement has appeared in the buffer
  172.      since the last call to ggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, 1 is returned, and the
  173.      value of marker associated with the measurement by ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  174.      or ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX is written into the variable referenced by
  175.      _m_a_r_k_e_r__p. The measurements will appear in the buffer in the order in
  176.      which they were requested. If the buffer overflows, ggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  177.      may return -1 as soon as the overflow is detected, even if the
  178.      measurement being polled did not cause the overflow. (An implementation
  179.      may also choose to delay reporting the overflow until the measurement
  180.      that caused the overflow is the one being polled.)  If no new measurement
  181.      has been written to the buffer, and overflow has not occurred,
  182.      ggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX returns 0.
  183.  
  184.      To get a count of the number of new valid GLints written to the buffer,
  185.      call ggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX. The value returned is the number of GLints
  186.      that have been written to the buffer since the last call to
  187.      ggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX or ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX.  If the buffer has
  188.      overflowed since the last call to ggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, -1 is returned
  189.      for the count.  Note that ggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX can be used independently
  190.      of ggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))          OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee          ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))
  203.  
  204.  
  205.  
  206. EEEEXXXXAAAAMMMMPPPPLLLLEEEESSSS
  207.           #ifdef GL_SGIX_instruments
  208.           #define MARKER1 1001
  209.           #define MARKER2 1002
  210.           {
  211.              static GLint buffer[64];
  212.              GLvoid *bufp;
  213.              int id, count0, count1, r;
  214.  
  215.              /* define the buffer to hold the measurements */
  216.              glInstrumentsBufferSGIX(sizeof(buffer)/sizeof(GLint), buffer);
  217.  
  218.              /* enable the instruments from which one wishes to take measurements */
  219.              glEnable(<an enum for a supported instrument, such as GL_IR_INSTRUMENT1_SGIX>);
  220.  
  221.              glStartInstrumentsSGIX();
  222.              /* insert GL commands here */
  223.              glReadInstrumentsSGIX(MARKER1);
  224.              /* insert GL commands here */
  225.              glStopInstrumentsSGIX(MARKER2);
  226.  
  227.              /* query the number of measurements since the buffer was specified */
  228.              glGetIntegerv(GL_INSTRUMENT_MEASUREMENTS_SGIX,&r);
  229.                  /* now r should equal 2 */
  230.  
  231.              /* query the pointer to the instrument buffer */
  232.              glGetPointervEXT(GL_INSTRUMENT_BUFFER_SGIX,&bufp);
  233.                  /* now bufp should be equal to buffer */
  234.  
  235.              /*
  236.               * we can do a GetInstrumentsSGIX before or after the calls to
  237.               * PollInstrumentsSGIX but to be sure of exactly what
  238.               * measurements are in the buffer, we can use PollInstrumentsSGIX.
  239.               */
  240.              count0 = glGetInstrumentsSGIX();
  241.              /* Since 0, 1, or 2 measurements might have been returned to
  242.               * the buffer at this point, count0 will be 0, 1, or 2 times
  243.               * the size in GLints of the records returned from the
  244.               * currently-enabled instruments.
  245.               * If the buffer overflowed, count0 will be -1.
  246.               */
  247.  
  248.              while (!(r = glPollInstrumentsSGIX(&id))) ;
  249.              /* if r is -1, we have overflowed.  If it is 1, id will
  250.               * have the value of the marker passed in with the first
  251.               * measurement request (should be MARKER1).  While it is 0,
  252.               * no measurement has been returned (yet).
  253.               */
  254.  
  255.              while (!(r = glPollInstrumentsSGIX(&id))) ;
  256.              /* see the note on the first poll; id now should equal MARKER2 */
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))          OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee          ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))
  269.  
  270.  
  271.  
  272.              count1 = glGetInstrumentsSGIX();
  273.              /* the sum of count0 and count1 should be 2 times the size in GLints
  274.               * of the records returned for all instruments that we have enabled.
  275.               */
  276.           }
  277.           #endif
  278.  
  279.  
  280. NNNNOOOOTTTTEEEESSSS
  281.      ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX, ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,
  282.      ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX and ggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX are
  283.      part of the GGGGLLLL____SSSSGGGGIIIIXXXX____iiiinnnnssssttttrrrruuuummmmeeeennnnttttssss extension, not part of the core GL
  284.      command set.  See ggggllllIIIInnnnttttrrrroooo for information about using extensions.
  285.  
  286. EEEERRRRRRRROOOORRRRSSSS
  287.      If _s_i_z_e is negative, GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____VVVVAAAALLLLUUUUEEEE is generated.
  288.  
  289.      GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN is generated if ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX is executed
  290.      twice without an intervening execution of ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX or
  291.      ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX. Symmetrically, GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN is generated
  292.      if ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX is executed twice without an intervening
  293.      ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX.  ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX will generate
  294.      GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN if executed after an execution of ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssss
  295.      without an intervening execution of ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX or
  296.      ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX.  Executing any of ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,
  297.      ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, or ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssss without a successful
  298.      execution of ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX to define a buffer will generate
  299.      GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN.
  300.  
  301.      GGGGLLLL____IIIINNNNVVVVAAAALLLLIIIIDDDD____OOOOPPPPEEEERRRRAAAATTTTIIIIOOOONNNN is generated if any of ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssBBBBuuuuffffffffeeeerrrrSSSSGGGGIIIIXXXX,
  302.      ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX,
  303.      ggggllllPPPPoooollllllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX or ggggllllGGGGeeeettttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX is executed between the
  304.      execution of ggggllllBBBBeeeeggggiiiinnnn and the corresponding execution of ggggllllEEEEnnnndddd.
  305.  
  306. AAAASSSSSSSSOOOOCCCCIIIIAAAATTTTEEEEDDDD GGGGEEEETTTTSSSS
  307.      ggggllllGGGGeeeetttt with argument GGGGLLLL____IIIINNNNSSSSTTTTRRRRUUUUMMMMEEEENNNNTTTT____MMMMEEEEAAAASSSSUUUURRRREEEEMMMMEEEENNNNTTTTSSSS____SSSSGGGGIIIIXXXX
  308.      ggggllllGGGGeeeettttPPPPooooiiiinnnntttteeeerrrrvvvv with argument GGGGLLLL____IIIINNNNSSSSTTTTRRRRUUUUMMMMEEEENNNNTTTT____BBBBUUUUFFFFFFFFEEEERRRR____PPPPOOOOIIIINNNNTTTTEEEERRRR____SSSSGGGGIIIIXXXX
  309.      ggggllllGGGGeeeettttSSSSttttrrrriiiinnnngggg with argument GGGGLLLL____EEEEXXXXTTTTEEEENNNNSSSSIIIIOOOONNNNSSSS
  310.  
  311.  
  312. MMMMAAAACCCCHHHHIIIINNNNEEEE DDDDEEEEPPPPEEEENNNNDDDDEEEENNNNCCCCIIIIEEEESSSS
  313.      The SSSSGGGGIIIIXXXX____iiiinnnnssssttttrrrruuuummmmeeeennnnttttssss extension is supported only on IIIInnnnffffiiiinnnniiiitttteeeeRRRReeeeaaaalllliiiittttyyyy
  314.      systems.
  315.  
  316.      The GGGGLLLL____IIIIRRRR____IIIINNNNSSSSTTTTRRRRUUUUMMMMEEEENNNNTTTT1111____SSSSGGGGIIIIXXXX instrument is implemented only on
  317.      IIIInnnnffffiiiinnnniiiitttteeeeRRRReeeeaaaalllliiiittttyyyy systems.  Each measurement uses 10 words of the buffer.
  318.      The first (index 0) will be GGGGLLLL____IIIIRRRR____IIIINNNNSSSSTTTTRRRRUUUUMMMMEEEENNNNTTTT1111____SSSSGGGGIIIIXXXX itself. The second
  319.      word (index 1) will be 10.  The following words are:
  320.  
  321.           COUNTEMPTY (index 2) Increments each clock cycle for which a word of
  322.           screen-space geometry, pixel, or texel data was not transferred from
  323.           the GE board to the RM board.  A high value could indicate that
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))          OOOOppppeeeennnnGGGGLLLL RRRReeeeffffeeeerrrreeeennnncccceeee          ggggllllIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX((((3333GGGG))))
  335.  
  336.  
  337.  
  338.           rendering is geometry-limited or host-limited (because the GE is not
  339.           delivering commands to the RM as fast as the RM can process them),
  340.           or that rendering is rasterization-limited (because the RM is
  341.           working on previous commands and is refusing to accept new data from
  342.           the GE).  Unfortunately there is no simple way to distinguish
  343.           between these two cases.  The counter is set to zero by
  344.           ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, and by ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX after its value
  345.           has been written to the buffer.
  346.  
  347.           COUNTDRAW (index 3) Increments each clock cycle for which a word of
  348.           screen-space geometry or pixel data (but not texel data) is
  349.           transferred from the GE board to the RM board.  The counter is set
  350.           to zero by ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, and by ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  351.           after its value has been written to the buffer.
  352.  
  353.           COUNTLOAD (index 4) Increments each clock cycle for which a word of
  354.           texture data is written to the texture memory.  The counter is set
  355.           to zero by ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX, and by ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  356.           after its value has been written to the buffer.
  357.  
  358.           MAILBOX_TIMESTAMP (index 5) Contains the value of COUNTALL (see
  359.           below) at the time ggggllllSSSSttttaaaarrrrttttIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX or ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX
  360.           was called.
  361.  
  362.           COUNTALL (index 6) Increments every clock cycle. No effort is made
  363.           to prevent wrapping.
  364.  
  365.           PAD (index 7) Unused.
  366.  
  367.           MARKER (index 8) Holds the value of the marker passed to
  368.           ggggllllSSSSttttooooppppIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX or ggggllllRRRReeeeaaaaddddIIIInnnnssssttttrrrruuuummmmeeeennnnttttssssSSSSGGGGIIIIXXXX for this measurement.
  369.  
  370.           MAILBOX (index 9) Holds a value that is used by the implementation.
  371.           Typically a sequence identifier, set after the buffer has been
  372.           specified, starting at 1 with the first measurement and incrementing
  373.           by 1 for each successive measurement.
  374.  
  375.  
  376. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  377.      ggggllllFFFFlllluuuusssshhhhRRRRaaaasssstttteeeerrrrSSSSGGGGIIIIXXXX, ggggllllEEEEnnnnaaaabbbblllleeee
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.